package com.mindskip.xzs.configuration.spring.security;
//这段代码定义了一个名为 `RestUtil` 的工具类，提供了发送 JSON 格式的 HTTP 响应的方法，主要用于前后端交互时返回统一格式的响应信息。
//通过 AJAX 请求发送到后端，其中包含了需要发送的系统代码、状态码、消息和内容。
// 后端会根据这些信息构建一个 `RestResponse` 对象，并将其转换为 JSON 字符串，然后通过 HttpServletResponse 对象将该 JSON 字符串作为响应内容返回给前端。
//前端可以通过解析这个 JSON 响应来获取后端传递的状态码、消息和内容，从而实现前后端之间的数据传输和通信。这种方式有助于统一前后端的数据格式。
import com.mindskip.xzs.base.RestResponse;
import com.mindskip.xzs.base.SystemCode;
import com.mindskip.xzs.utility.JsonUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * RestUtil 类提供了静态方法用于向客户端发送 JSON 格式的 HTTP 响应。
 */
public class RestUtil {
    // 创建日志记录器
    private static final Logger logger = LoggerFactory.getLogger(RestUtil.class);

    /**
     * 根据系统代码发送响应
     * @param response HttpServletResponse 对象，用于发送响应
     * @param systemCode 系统代码，包含状态码和消息
     */
    public static void response(HttpServletResponse response, SystemCode systemCode) {
        // 调用重载方法，传递系统代码的状态码和消息
        response(response, systemCode.getCode(), systemCode.getMessage());
    }

    /**
     * 根据状态码和消息发送响应
     * @param response HttpServletResponse 对象，用于发送响应
     * @param systemCode 状态码
     * @param msg 响应消息
     */
    public static void response(HttpServletResponse response, int systemCode, String msg) {
        // 调用重载方法，传递状态码、消息和内容（为 null）
        response(response, systemCode, msg, null);
    }

    /**
     * 根据状态码、消息和内容发送响应
     * @param response HttpServletResponse 对象，用于发送响应
     * @param systemCode 状态码
     * @param msg 响应消息
     * @param content 响应内容，可以为 null
     */
    public static void response(HttpServletResponse response, int systemCode, String msg, Object content) {
        try {
            // 创建 RestResponse 对象，包含状态码、消息和内容
            RestResponse res = new RestResponse<>(systemCode, msg, content);
            // 将 RestResponse 对象转换为 JSON 字符串
            String resStr = JsonUtil.toJsonStr(res);
            // 设置响应内容类型和字符编码
            response.setContentType("application/json;charset=utf-8");
            // 将 JSON 字符串写入响应
            response.getWriter().write(resStr);
        } catch (IOException e) {
            // 捕获 IOException 并记录错误信息
            logger.error(e.getMessage(), e);
        }
    }
}
